package mx.ipn.negocios.facturacion;

import mx.ipn.Constantes;
import mx.ipn.negocios.ConexionConPersistencia;
import mx.ipn.to.*;
public class Facturas {
	public Facturas(){
		try{
		ConexionConPersistencia.inicializar();
    	ConexionConPersistencia.iniciarFabricaDAOS(Constantes.FABRICA_DAOS_MYSQL);
	    }
	    catch(Exception e){
	    System.out.println("dsfgsdhgf" + e.getMessage());	
	    }
	}
    public static BitacoraSTO[] verServicios()
    {
    	return((BitacoraSTO[])ConexionConPersistencia.invocaServicio("selectBitacoraServicio", BitacoraSTO[].class));
    }
    public static FacturaTO[] verFacturas(int mes,int anio)
    {
    	int arg []= new int[2];
    	arg[0]= mes;
    	arg[1]= anio;
    	return((FacturaTO[])ConexionConPersistencia.invocaServicio("findFacturaByMA",arg,FacturaTO[].class));
    }
    public static DetallePrefacturaTO[] verDetallePrefactura(String rfc){
    	return((DetallePrefacturaTO[])ConexionConPersistencia.invocaServicio("verDetallePrefactura",rfc,DetallePrefacturaTO[].class));
    }
    public static boolean crearDetallePrefactura(DetallePrefacturaTO detpf){
    	return ((Boolean)ConexionConPersistencia.invocaServicio("insertDetallePrefactura",detpf,Boolean.class)).booleanValue();
    }
    public static short updateDetalleFactura(DetalleFacturaTO detalleFacturaTO){
		return ((Short)ConexionConPersistencia.invocaServicio("updateDetalleFactura",detalleFacturaTO,Short.class)).shortValue();
	}
	public static DetalleFacturaTO findByID(int idDetallefactura){
		return ((DetalleFacturaTO)ConexionConPersistencia.invocaServicio("findByID",idDetallefactura,DetalleFacturaTO.class));
	}
	public static DetalleFacturaTO[] selectDetalleFactura(){
		return ((DetalleFacturaTO[])ConexionConPersistencia.invocaServicio("selectDetalleFactura",DetalleFacturaTO[].class));
	}
	public static DetalleFacturaTO[] selectDetalleFacturaByFactura(int idFactura){
		return ((DetalleFacturaTO[])ConexionConPersistencia.invocaServicio("selectDetalleFacturaByFactura",idFactura,DetalleFacturaTO[].class));
	}
	public static short borraFactura(int idFactura){
		return  ((Short)ConexionConPersistencia.invocaServicio("borraFactura",idFactura,Short.class)).shortValue();
	}
	public static short updateFactura(FacturaTO factura){
		return  ((Short)ConexionConPersistencia.invocaServicio("updateFactura",factura,Short.class)).shortValue();
	}
	public static short eliminaDetalleFactura(int idFactura){
		return  ((Short)ConexionConPersistencia.invocaServicio("borraDetalleFactura",idFactura,Short.class)).shortValue();
	}
	public static short setConsiderado(int id,boolean considerado){
		Object arg []= new Object[2];
    	arg[0]= id;
    	arg[1]= considerado;
		return  ((Short)ConexionConPersistencia.invocaServicio("setConsiderado",arg,Short.class)).shortValue();
	}
	public static boolean crearDetalleFactura(DetalleFacturaTO det){
    	return ((Boolean)ConexionConPersistencia.invocaServicio("insertDetalleFactura",det,Boolean.class)).booleanValue();
    }
	public static FacturaTO[] selectFactura(){
		return (FacturaTO[])ConexionConPersistencia.invocaServicio("selectFactura",FacturaTO[].class);
	}
    public static boolean crearFactura(FacturaTO facto)
    {
    	/*crea factura 
    	 * luego se leen los id de prefactura  el id de factura
    	 * y se guarda el detalle */
    	//int id=0;
    	//boolean res=false;
    	//FacturaTO[] facturato;
        //try{
        boolean flag = ((Boolean)ConexionConPersistencia.invocaServicio("insertFactura",facto,Boolean.class)).booleanValue();
        /*if(flag==true){
        	facturato = (FacturaTO[])ConexionConPersistencia.invocaServicio("selectFactura",FacturaTO[].class);
            id=facturato[facturato.length-1].getIdFactura();
            for(int i = 0; i<detto.length;i++)
            {
        	   DetalleFacturaTO det = new DetalleFacturaTO(detto[i].getIdDetalleFactura(),id,detto[i].getIdOperacion());
        	   boolean ins = ((Boolean)ConexionConPersistencia.invocaServicio("insertDetalleFactura",det,Boolean.class)).booleanValue();
	        }
         }*/
         return flag;
        //}
        //catch(Exception e){
          //System.out.println(e.getMessage());
        //} 
        //return res;
    }
    public static ClienteTO[] listaDeClientes()
    {
        return (ClienteTO[]) ConexionConPersistencia.invocaServicio("seleccionarClientes", ClienteTO[].class);
    }
    public static ClienteTO[] buscarCliente(String nombre)
    {
    	return (ClienteTO[])ConexionConPersistencia.invocaServicio("selectClientesByNombre",nombre, ClienteTO[].class);
    }
    public static ClienteTO[] buscarClienteRfc(String rfc)
    {
    	ClienteRfcTO clirfc= null;
    	RfcTO rfcto= null;
    	ClienteTO [] cli= null;
    	try{
    		rfcto = (RfcTO)ConexionConPersistencia.invocaServicio("findRfcByRegistro",rfc, RfcTO.class);
    		clirfc = (ClienteRfcTO)ConexionConPersistencia.invocaServicio("selectClienteRfcActivoByIdRfc",rfcto.getIdRfc(),ClienteRfcTO.class);
    		cli = clirfc.getClienteTO();
    	}
    	catch(Exception e){
    	System.out.println("dsfgsdhgf" + e.getMessage());	
    	}	
    	return cli;
    }

    public static ClienteRfcTO selectClienteRfcActivoByIdCliente(int idCliente)
    {
    	return (ClienteRfcTO)ConexionConPersistencia.invocaServicio("selectClienteRfcActivoByIdCliente",idCliente,ClienteRfcTO.class);
    }
    public static RfcTO findRfcById(int idrfc){
		return (RfcTO)ConexionConPersistencia.invocaServicio("findRfcById",idrfc,RfcTO.class);
	}
    public static RfcTO findRfcByRegistro(String registro){
		return (RfcTO)ConexionConPersistencia.invocaServicio("findRfcByRegistro",registro,RfcTO.class);
	}
    public static RfcTO findRfcByDenominacion(String denominacion){
		return (RfcTO)ConexionConPersistencia.invocaServicio("findRfcById",denominacion,RfcTO.class);
	}
	public static RfcTO[] selectRfc() {
		return (RfcTO[])ConexionConPersistencia.invocaServicio("selectRfc",RfcTO[].class);
	}
    public static void main(String []args)
    { 
    	try{
    		ConexionConPersistencia.inicializar();
        	ConexionConPersistencia.iniciarFabricaDAOS(Constantes.FABRICA_DAOS_MYSQL);
       //System.out.println(verServicios()[0].getIdCliente());
    	 //System.out.println(buscarClienteRfc("tme840315kt6")[0].getNombre());
    	//ClienteTO[] arr = (ClienteTO[])ConexionConPersistencia.invocaServicio("selectClientesByNombre","fofolfo", ClienteTO[].class);
    	//ClienteTO[] arr = (ClienteTO[]) ConexionConPersistencia.invocaServicio("seleccionarClientes", ClienteTO[].class);
    	DetallePrefacturaTO[] arr = (DetallePrefacturaTO[]) ConexionConPersistencia.invocaServicio("verDetallePrefactura","tme840315kt6",DetallePrefacturaTO[].class);
    	//ClienteTO[] arr= fact.listaDeClientes(); 
    	//System.out.println(arr[0].getNombre() );
    	}
    	catch(Exception e){
    	System.out.println("dsfgsdhgf" + e.getMessage());	
    	}
    }
}
